package com.cty._04_Optimization._46_TranslateNumbersToString;

/**
 * @Auther: cty
 * @Date: 2020/7/18 11:05
 * @Description: 面试题46：把数字翻译成字符串
 * 题目：给定一个数字，我们按照如下规则把它翻译为字符串：0翻译成"a"，1翻
 * 译成"b"，……，11翻译成"l"，……，25翻译成"z"。一个数字可能有多个翻译。例
 * 如12258有5种不同的翻译，它们分别是"bccfi"、"bwfi"、"bczi"、"mcfi"和
 * "mzi"。请编程实现一个函数用来计算一个数字有多少种不同的翻译方法。
 * @version: 1.0
 */
public class TranslateNumbersToString {

    public static int getTranslationCount(int number){
        if(number < 0)
            return 0;

        String stringNumber = Integer.toString(number);
        int length = stringNumber.length();
        int[] counts = new int[length];
        int curCount = 0;

        for(int i=length-1; i>=0; i--){
            if(i == length-1){
                curCount = 1;
                counts[i] = 1;
                continue;
            }

            curCount = counts[i+1];
            int digit1 = stringNumber.charAt(i) - '0';
            int digit2 = stringNumber.charAt(i+1) - '0';
            int digit = digit1*10 + digit2;
            if(digit>=10 && digit<=25)  // 【注意 >10】
                if(i < length-2)
                    curCount += counts[i+2];
                else
                    curCount += 1;

            counts[i] = curCount;  // 【不要忘了把当前统计值赋给数组】
        }  // end for

        return curCount;
    }  // end

}  // end class
